export function checkURL(url: any) {
    const Expression = /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/;
    const objExp = new RegExp(Expression);
    if (objExp.test(url)) {
        return true;
    } else {
        return false;
    }
}

export function getFileType(fileName: string) {
    // 通过正则表达式匹配文件名中的扩展名
    const match = fileName.match(/\.([^.]+)$/);

    // 如果找到匹配项，则返回小写的扩展名，否则返回null
    return match ? match[1].toLowerCase() : null;
}

export function getFileTitle(fileName: string) {
    // 通过正则表达式匹配文件名中的扩展名
    const match = fileName.match(/^(.+)\.([^.]+)$/);

    // 如果找到匹配项，则返回匹配的部分，否则返回原文件名
    return match ? match[1] : fileName;
}

export function sizeUnitConvert(size: number) {
    let kb = 1024
    let unit = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']
    let i = Math.floor(Math.log(size) / Math.log(kb))
    // let unit = size < 1024 ? 'KB' : size < 1024*1024 ? 'MB'
    return (size / Math.pow(kb, i)).toPrecision(3) + ' ' + unit[i];
}


/**
 * 防抖 一定时间内执行一次  点击后时间到才触发，再次点击重新计时
 * 单位时间内事件触发会被重置，避免事件被误伤触发多次
 * @param fn
 * @param delay
 */
export function debounce(fn: Function, delay: number) {
    let timer: any
    return function () {
        if (timer) {
            clearTimeout(timer)
        }
        timer = setTimeout(() => {
            fn()
        }, delay)
    }
}

/**
 * 节流 一段时间内触发一次 触发后经过一段才能再触发
 * 单位时间内事件只能触发一次
 * @param fn
 * @param delay
 */
export function throttle(fn: Function, delay: number) {
    let isThtottle = true
    return () => {
        if (!isThtottle) return
        isThtottle = false
        setTimeout(() => {
            fn()
            isThtottle = true
        }, delay)
    }
}
